CS 111: Introduction to Computer Science

Table of Contents

Course overview

Computer science, especially when it is considered as one of the liberal arts, is perhaps best described as the study of formal processes for solving problems. These processes for solving problems, known as algorithms, are somewhat like recipes for baking a dish, or directions for navigating on road trips. It turns out that these marvelous devices that we call computers are wonderful at carrying out algorithms for us, and so they act as a remarkable testing and implementation environment for the algorithms that we create. Programming computers to carry out algorithms for us is probably the single-most common task that computer scientists do; yet, programming is only one aspect of computer science. In this course, we will engage in learning the fundamentals of computer science, both from a perspective of programming and of algorithms in general.

Said differently: some may argue that studying literature is relevant to all, since the ideas within are about life in general. Some may argue that studying chemistry is relevant to all, since everyone can benefit from an understanding of how the world is constructed. I argue that studying a bit of computer science is relevant to all, regardless of what one may end up doing, because the ideas within help one to formulate careful, rigorous, step-by-step approaches to whatever problems one needs to address in life.

Course information

  • Instructor: Dave Musicant
  • Email: dmusicant
  • Office: Olin 321 (507-222-4369)
  • Office hours: check my web site
  • Prefects: Emily Litton, Sunny Kim
  • Teaching assistants / graders: Jake Jasmer, Liam Keane, Anna Neiman-Golden, Ben Zhao

Textbook

Python Programming: An Introduction to Computer Science, 3rd ed, by John Zelle. This book is a great source for learning the material that we will be covering in the course, and it has much better explanations (most of the time) than what you’ll find on random websites. It’s also well-priced. You can rent a used copy of it for the term from the college bookstore for under $25.

I will be regularly assigning readings from the textbook, and asking you to submit comments to help keep you up to date with the reading.

I would very much encourage you to make sure that you do use the 3rd edition of the text, as opposed to a prior one. You can probably get away with the 2nd edition if you had to, though the section numbering will be different, and there will be bits of content missing. The 1st edition is unusable for this course, as it is based on an older incompatible version of the Python language.

Communication

We’ve got a variety of ways of communicating with each other.

  • In class! Bring general questions to class and I can answer for everyone.
  • Office hours. I will be holding office hours in person; there is a link on the Moodle site for times that I will be available. You can find it in the “Course Blocks” section of the Moodle site; there’s a link for that on the top-right.
  • I will use Moodle announcements for all general purpose announcements to the entire class. You will get an email copy of those announcements, and they are also kept in the Moodle announcements forum if you want to see them again later.
  • You should also use the Moodle Questions & Answers forum for any questions related to the course. Please do so rather than emailing me, unless your question is of a personal nature (such as relating to your grade, or something like that). By posting your questions publicly, it’s like asking in class, and everyone in the class can benefit from the answer. Please also pitch in and help each other out: if you know the answer to someone else’s question, please go ahead and answer it. If you wish, you can post a question anonymously so that other students in the class can’t see who it was. Please use this sparingly, though; conversation tends to drop in quality if too much of it is anonymous.
  • Frequency of communication: you should check the course Moodle site and your email at least once a day. I’ll be checking the Moodle Q&A forum and my email, and responding to people, three times a day: once early in the morning (likely before 8am CDT), once roughly in the middle of the day (sometime 11am-2pm), and once near the end of the working day (sometime 4pm-6pm). I’ll be less reliable on weekends. When engaging with course activities online, always use your Carleton Gmail/Google account rather than personal accounts.

What you will be doing

The key goals over this term is for you to first learn to program in Python, and also to learn a number of other CS-related ideas.

To accomplish this, you’ll be doing a number of things.

  • Participating in class!
  • Working on CodeCheck labs. We’ll be taking a portion of each class to work on labs that you’ll mostly do in pairs. You should be turning these in. For the portions that you don’t have time to complete in class, you should submit them afterwards.
  • Reading the textbook. After each reading, you’ll be posting a question or comment to Moodle.
  • Doing assignments. I’ll have assignments posted to Moodle, with deadlines attached to them. You’ll need to submit those. Some of them will be individualized, and some of them will be done via pair programming. Either way, you can still talk with others about the assignment, and get help.
  • Taking exams. The key goal of in-class exams is to check in that you’ve been able accomplish the goals of the class without needing help from others to be able to do it.

Grading

Grading for this course will be based on your performance on:

  • paired assignments
  • individual assignments
  • CodeCheck labs
  • exams
  • postings on the readings

You will receive a separate grade for each of the above categories, and then it will be aggregated together to determine a final grade. Here are some more details on each, and then how the results will be combined.

Assignments, both individual and paired

Each assignment will receive one of these grades.

  • 4: Exemplary work. All specified functionality is working correctly.
  • 3: Meets expectations. The core functionality of the assignment has been correctly completed, but one or more of the exemplary-level aspects may not be working correctly.
  • 2: Partially meets expectations. The assigned task has been partially completed to a level indicated some understanding of the concepts, but the core required functionality has not been completely achieved. It is clear that the core goal of the assignment is there and is on its way to being accomplished.
  • 1: Beginnings. The work is not complete enough to indicate that a baseline level of correctness has been achieved. This likely applies when the work has very large gaps in functionality or in implementation. Nonetheless, the work submitted demonstrates that real progress has been made towards solution of the problem.
  • 0: Not assessable. The work was not submitted, or shows a deep disconnect with what was assigned.

For the programming assignments, correctness will often be determined based on a set of automated tests that will be provided, as well as some style guidelines. This way, you know mostly, but not entirely, what your grade will be when you submit your work. (The key exceptions will be that we will review your code to verify that you haven’t tailored your code too directly to the specific tests that we have written, and we will be looking for well constructed code.)

After receiving a grade on an assignment, if that grade is below “Meets expectations”, you may resubmit for up to one week after receiving the grade in order to try to improve the grade. A resubmission, however, cannot earn a grade higher than “Meets expectations.”

If you have any assignments that were turned in late or were resubmitted, you must track them and make sure that they are graded. In particular, you if a late or resubmitted assignment has not been graded, you must remind me by the last day of classes by sending me an email about it. Resubmitted or late work will not be graded past the end of the term, even if it was submitted on time.

CodeCheck labs

We will be doing a variety of online programming activities at a website we’ll be using named CodeCheck. These are automatically graded, so you’ll simply receive a total percentage grade for all of your work at the end of the term. You can resubmit these as many times as you need to in order to get them correct. Occasionally there may be other activities, such as Moodle quizzes, that I’ll group into this category.

CodeCheck automatically scores your grade on a 100 point scale, but I’ll convert that to a 4-point scale (where 100 maps to a 4, and 0 maps to a 0).

In-class exams

The in-class exams will be scaled to a 4-point scale, and their score will be averaged. They will generally be a mixture of shorter programming tasks, but can also contain conceptual questions that could appear as mini-essays, short answers, multiple choice, or other possibilities.

If you receive a grade lower than a 3 on an exam, you may retake a similar exam with different questions within a week after you receive the exam back to replace your grade. You may not earn a grade of more than 3 on a retake, however. An exception to this is the last exam, for which there will not be a retake.

Postings on readings

I’ll be asking you to make a post to Moodle after each reading with a question or comment. Your reading score will be the fraction of readings that you have commented on, scaled to a 4-point scale.

Your aggregate grade

Your final course grade will be a weighted average of the above:

  • CodeCheck labs: 10%
  • Programming assignments: 50%
  • Exams: 35%
  • Postings on readings: 5%

Based on the above weighted average, here are the thresholds that will be used for each grade.

grade threshold
D- 0.500
D 0.835
D+ 1.165
C- 1.500
C 1.835
C+ 2.165
B- 2.500
B 2.835
B+ 3.165
A- 3.500
A 3.835

(In case you’re curious as to where the above thresholds come from, they were obtained by taking the midpoints between each grading level used for Carleton’s GPA calculation. For example, in Carleton’s GPA calculation an A is mapped to a 4 and an A- is mapped to a 3.67. Therefore, if you get an average for this course of 3.835, which is directly between the two, that’s sufficient to round you up to an A.)

Special exceptions to above details

Quantitative Reasoning Encounter (QRE) success

In order to achieve at least a C- in the class, you must achieve a grade of at least 2 (partially meets expectations) on each portion of the data analysis assignment at the end of the course, which is the portion of the course that satisfies the college QRE graduation requirement.

Demonstration of individual success

If your individual programming assignment average OR your exam average is below C-, you will not receive a grade of C- or better in the course.

Late policy

Postings based on the readings

The concept behind the readings is that they help to prepare you for class. Doing the readings after class defeats much of the purpose of them, since we will be discussing content in class that builds on it. Therefore, doing these on time before class starts is important.

You have a quota of 7 late reading late days that you may use throughout the term if you like. This means that you can submit 7 postings one day late each, or a single posting 7 days late. Once your late days are used up, you will no longer be able to submit postings past the deadline. You may ask for more late days if need be, but you will need to contact me directly and explain why you need more.

CodeCheck Labs and Programming Assignments

This section describes both CodeCheck labs as well as programming assignments; for simplicity, this section will combine both together under the general category of “assignments.”

Every assignment will have two deadlines associated with it: the due date and the cut-off date. The due date is the actual due date. You will incur late penalties if you submit an assignment after the due date. The cut-off date is the last possible date that you can submit the assignment, under any circumstances, regardless of late days or extensions. Moodle will prevent you from submitting after the cut-off date.

You have a quota of 7 assignment days that you may use throughout the term if you like. This means that you can submit 7 assignments one day late each, or a single assignment 7 days late. Once your late days are used up, you will no longer be able to submit postings past the deadline. You may ask for more late days if need be, but you will need to contact me directly and explain why you need more.

(This is a different quota than the reading posting late days.)

In-person class

CS 111 is an in-person class, and we learn a lot by being in a room together. This will not be a hybrid class that is simultaneously taught online. There are a variety of reasons that may pop up for which you might not be able to attend class in person. These include being ill, family emergencies, job interviews, and essentially any other reason why you might not be able to attend in person. You should make sure to get contact information for at least one other person in the class who you can contact if you were not present. A pair-programming partner is perfect for this. That person should share their notes with you, so that you can fill in the gaps for what you missed.

The opportunity to Zoom into class will not in general be provided, as it reduces the quality of the experience for the rest of the class. The only exception will be if you are in college-required isolation, or if you are feeling ill and believe that you may be contagious. In either of these cases, email me at least 4 hours before class in order to work out arrangements.

How to get help

There are lots of resources for help in this course!

  • I have lab hours.
  • We have a course prefect, who will hold prefect sessions.
  • We have many lab assistants who are happy to help, and who are available in Olin 310.

Working together

  • Each programming assignment will either be a “paired” problem assignment or an “individual” assignment.
  • When working on paired assignments, you and your partner should engage in the pair programming model. One of you is “driving,” i.e. actually using the keyboard and mouse. The other is actively engaged following along, stopping bugs, and providing ideas. I generally expect that you are doing this side-by-side, in person. If you are not and are remotely sharing a screen, you should use Zoom, Google Hangouts, Facetime, a phone call, or some other voice approach for communicating while working. You should make sure that over the course of an assignment that you spend roughly the same amount of time each “driving.” This means, for example, that if you are sharing your screen, then you swap whose screen is being shared every 15 minutes. I will also ask you to turn in a form rating the work that your partner does.
  • If you are determined to work alone on the paired assignments, that’s fine. I will expect, however, that you do work of the same amount and quality as those students with partners. You can change whether or not you work alone each “cycle” that I assign new partners.

Instructional continuity

In these unprecedented times, we will need to exhibit flexibility and patience with each other throughout the term. I have done my best to design the course so that everyone can be successful, regardless of personal circumstances. Communication will be key; please keep me updated about your situation in addition to reaching out to the other relevant offices on campus. If you experience significant technological problems that limit your ability to participate, please contact the ITS Helpdesk at 507-222-5999 or helpdesk@carleton.edu. For announcements of known technical issues, visit the Helpdesk portal. If your personal situation (due to COVID-19 illness or other circumstances) begins to impact your ability to engage with the course, please contact the Dean of Students Office.

Collaboration, plagiarism, and the difference between the two

There are two different kinds of working together: collaborating and plagiarism.

Collaborating

Collaborating is good. You are encouraged to collaborate on ideas and program design. Programming is often a social effort, and there is much you can learn by talking out the ideas in this class with each other. If a piece of your program utilizes someone else’s idea, i.e., someone other than the program author(s), you must give that person credit in your credits.txt file. When in doubt, give credit.

Plagiarism and appropriate use of other materials in CS 111

Collaborating is good. Students are encouraged to collaborate on ideas and program design. Learning is often a social effort. However, it is important that students don’t slip into plagiarizing the work of others, or inappropriate use of work by others, which is explained below.

Plagiarism is when someone submit work that isn’t theirs, but that person takes credit for doing so.

Inappropriate use of work by others is when someone submits work by others that correctly cited, but the quantity of work taken is inappropriate because it defeats the entire purpose of the assignment.

Here are two quick examples:

  • If someone takes a program that they find online and submits it without citing it, that’s plagiarism. This is because by not citing it, that student is implicitly taking credit for it.
  • If someone takes a program that they find online that accomplishes the tasks laid out by an assignment, and they submit it with an appropriate citation, it is inappropriate use of work by others. This is because the student didn’t actually do the goals specified by the assignment. But because it was correctly cited, it isn’t plagiarism.

Inappropriate use of work by others prevents students from learning and achieving the goals of the course. It is generally acceptable to include small amounts of materials found elsewhere when cited correctly, and there’s some more specific information about that below. But the general principle is that the wholesale use of materials found elsewhere and submitted for assignments is not permitted, and results in an assignment receiving a grade of either “revision recommended” or “not assessable,” depending on the circumstances.

Plagiarism is problematic for all of the reasons that inappropriate work by others is, but it is also unethical, illegal, and a violation of college policy. I am compelled by Carleton policy to submit plagiarism cases that I find to the Academic Standing Committee. The academic penalty for a first offense is determined jointly between me and the Academic Standing Committee, but likely results in a grade of “not assessable” on the assignment. Furthermore, the college retains a record of the incident, and may respond with suspension or other sanctions on repeat occurrences.

In short, inappropriate use of work is considered as a poor submission, and is graded accordingly. Plagiarism is a deeper infraction that results in college-level disciplinary action. Students shouldn’t engage in either, but plagiarism is considerably worse.

The good news is that avoiding plagiarism is very easy. If you use work that isn’t yours, CITE IT. If you turn in an entire assignment with code that you got from the internet, and you cite it, it isn’t plagiarism.

Can you safely use any uncited materials at all? What about a single word, or examples from class?

Most importantly: if you’re unsure, just ask me. I’m happy to help!

Your default view should be that if you use code from elsewhere, you should cite it.

You may use any code or materials that I supply without citation. It is understood that any code I write or provide for this class is done so with the intention that you can use it and/or modify it. Likewise, any concepts, definitions, and theory are intended as a starting point for learning. This includes starter code that I give you for the assignments, but also any code or other materials that I supply in lectures, class worksheets, or the like. Likewise, the same applies for the official textbook that we use for the class.

If you find materials anywhere else (StackOverflow is the classic example, but there are many such places), you must cite it unless it is exceedingly short. Exceedingly short means perhaps less than three lines of code. Regardless, you should not be looking for code that solves the actual goals of the assignment, as this would be inappropriate use of work by others.

How do you cite material you find elsewhere?

Citing for purposes of this course is easy. If you find it online, add a comment to the code or materials with the URL where you found it. If you find it in a book, including our textbook, put in a comment with the title and author of the book and a page number. (You can abbreviate our class textbook in particular as “textbook”, or some such.) If you get it from someone else such as a lab assistant, friend, etc, put the name of the person in the comment. We’re not writing a research paper, so you don’t need to spend time with carefully formatted bibliography styles. The key point that matters is simply making clear what the source of the material is.

What if you modify the content that you find?

If you are using an idea based on code you find online, you still must cite it. Taking code that you find online and modifying the variable names, for example, is still plagiarism if you don’t cite it.

How does this apply to things other than code?

If you submit an idea from somewhere else, you must cite it. This applies for example to definitions, explanations, and conclusions that you find elsewhere, either online or from other people.

Assuming you cite everything correctly, how much is inappropriate use of work by others?

Again, if you have any concerns about this, just ask me and I’m happy to clarify in any particular case.

The answer to this varies based on the assignment, and hinges on what the goals of the assignment are. Anything I say here may be superseded by a particular assignment, but here is the philosophy.

The goal of an assignment is for you to accomplish the tasks specified. Of course, you may get help from others — either people, or reference sources — to help understand the challenges within. However, you should be assembling these pieces yourself in your own way to accomplish the tasks at hand. If you submit correctly cited work by others that accomplishes the assignment as a whole, or a significant fraction of it, then you are not accomplishing the goals of the assignment, and that is inappropriate work by others. Ask, and I’m always happy to clarify.

Course outline

This is a rough schedule of what we’ll be covering throughout the term. The actual Moodle page itself will be the precise and accurate description of what is due and when, and what readings you should be looking at. This overview is intended simply to give you a rough idea as to what to expect.

We will not always be covering everything in the textbook in the precise order that it contains. The textbook supports this well.

Schedule subject to change.

# Day Topics and textbook reference Assignment due by 10pm CST
1 M Sep 12 Overview, programming, and computing  
2 W Sep 14 Simple programs; assignment statements Getting started (Tues)
3 F Sep 16 Definite loops, computing with numbers Python printing
4 M Sep 19 Intro to graphics programming Python calculating
5 W Sep 21 More graphics programming, objects Basic graphics programming
6 F Sep 23 Strings and lists, files Automatic landscape
7 M Sep 26 String encoding and decoding  
8 W Sep 28 Defining functions, function calling Rotation Cipher
9 F Sep 30 Return values, parameter modifying  
  M Oct 3 Exam 1  
10 W Oct 5 Decision structures Rotation Cipher, redux
11 F Oct 7 While loop and looping patterns  
12 M Oct 10 Booleans and 1-D images Renaissance translator
13 W Oct 12 More 1-D images, blurring  
14 F Oct 14 2-D images Image Processing 1
  M Oct 17 Midterm break  
15 W Oct 19 Defining classes 1 Image Processing 2
16 F Oct 21 Defining classes 2 Image Processing 3
17 M Oct 24 Defining classes 3 Lunar Lander 1
  W Oct 26 Exam 2  
18 F Oct 28 Lists and search Lunar Lander 2
19 M Oct 31 Search and recursion Skyline
20 W Nov 2 More recursion Searching
21 F Nov 4 Slow sorting algorithms Recursion
22 M Nov 7 Merge sort Slow sorting assignment
23 W Nov 9 Dictionaries Merge sort assignment
24 F Nov 11 CSV files and data analysis  
25 M Nov 14 Overflow Data analysis round 1
  W Nov 16 Exam 3  
EW M Nov 21   Data analysis round 2